#ifndef CONTACT_SYSTEM_H
#define CONTACT_SYSTEM_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

#define MAX_NAME 50
#define MAX_PHONE 15
#define MAX_USERNAME 30
#define MAX_PASSWORD 30

// 双向循环链表节点结构体
typedef struct ContactNode {
    int id;
    char name[MAX_NAME];
    char gender;
    char phone[MAX_PHONE];
    struct ContactNode *prior;
    struct ContactNode *next;
} ContactNode;

// 用户信息结构体
typedef struct User {
    char username[MAX_USERNAME];
    char password[MAX_PASSWORD];
} User;

// ========== 链表操作函数声明 ==========
ContactNode* initList();
int isEmpty(ContactNode *head);
ContactNode* createNode(int id, const char *name, char gender, const char *phone);
int getLength(ContactNode *head);
void addContact(ContactNode *head);
void insertContactAtPosition(ContactNode *head, int position);
void deleteContactByName(ContactNode *head, const char *name);
void deleteContactById(ContactNode *head, int id);
ContactNode* findContactByName(ContactNode *head, const char *name);
ContactNode* findContactById(ContactNode *head, int id);
void updateContact(ContactNode *head, const char *name);
void showContacts(ContactNode *head);
void showContactsReverse(ContactNode *head);
void countGender(ContactNode *head);
void sortContactsByName(ContactNode *head);
void swapNodeData(ContactNode *a, ContactNode *b);
void clearList(ContactNode *head);
void freeList(ContactNode *head);

//用户认证函数声明
void registerUser();
int loginUser();
int userExists(const char *username);
void saveUserToFile(const User *user);
void loadUsersFromFile();

//文件操作函数声明
void saveContactsToFile(ContactNode *head);
void loadContactsFromFile(ContactNode *head);
void exportContactsToText(ContactNode *head);

//菜单函数声明 
void mainMenu();
void secondMenu(ContactNode *head);

//时间函数声明
char *getCurrentTime();
#endif
